{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0",
    "_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data.describe():                   0             1             2             3             4   \\\n",
      "count  1.140938e+06  1.140938e+06  1.140938e+06  1.140938e+06  1.140938e+06   \n",
      "mean   3.022720e+00  4.773536e+00  5.136573e+00  5.224901e+00  4.942197e+00   \n",
      "std    2.830416e-01  5.675158e-01  1.089616e+00  1.699957e+00  2.470204e+00   \n",
      "min    1.963000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00   \n",
      "25%    2.772000e+00  4.320000e+00  4.770000e+00  4.920000e+00  5.360000e+00   \n",
      "50%    2.943000e+00  4.680000e+00  5.020000e+00  5.620000e+00  5.990000e+00   \n",
      "75%    3.257000e+00  4.970000e+00  5.680000e+00  6.130000e+00  6.370000e+00   \n",
      "max    1.471600e+01  9.000000e+00  7.250000e+00  7.250000e+00  7.250000e+00   \n",
      "\n",
      "                 5             6             7             8             9   \\\n",
      "count  1.140938e+06  1.140938e+06  1.140938e+06  1.140938e+06  1.140938e+06   \n",
      "mean   4.038779e+00  2.738347e+00  1.944059e+00  1.097868e+00  5.103481e-01   \n",
      "std    3.061289e+00  3.229429e+00  3.038207e+00  2.511026e+00  1.810622e+00   \n",
      "min    0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00   \n",
      "25%    0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00   \n",
      "50%    5.980000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00   \n",
      "75%    6.410000e+00  6.380000e+00  6.270000e+00  0.000000e+00  0.000000e+00   \n",
      "max    7.250000e+00  7.250000e+00  7.250000e+00  7.250000e+00  7.250000e+00   \n",
      "\n",
      "       ...         55         56         57         58         59         60  \\\n",
      "count  ...  1140938.0  1140938.0  1140938.0  1140938.0  1140938.0  1140938.0   \n",
      "mean   ...        0.0        0.0        0.0        0.0        0.0        0.0   \n",
      "std    ...        0.0        0.0        0.0        0.0        0.0        0.0   \n",
      "min    ...        0.0        0.0        0.0        0.0        0.0        0.0   \n",
      "25%    ...        0.0        0.0        0.0        0.0        0.0        0.0   \n",
      "50%    ...        0.0        0.0        0.0        0.0        0.0        0.0   \n",
      "75%    ...        0.0        0.0        0.0        0.0        0.0        0.0   \n",
      "max    ...        0.0        0.0        0.0        0.0        0.0        0.0   \n",
      "\n",
      "                 61            62            63            64  \n",
      "count  1.140938e+06  1.140938e+06  1.140938e+06  1.140938e+06  \n",
      "mean   4.824436e+01  7.399721e+01  6.602032e+01  6.595430e+01  \n",
      "std    2.874463e+01  3.881505e+01  3.594353e+01  4.208716e+01  \n",
      "min    0.000000e+00  0.000000e+00  0.000000e+00  1.000000e-01  \n",
      "25%    1.930000e+01  3.640000e+01  4.410000e+01  3.100000e+01  \n",
      "50%    4.960000e+01  8.170000e+01  5.630000e+01  5.350000e+01  \n",
      "75%    7.780000e+01  1.108000e+02  9.000000e+01  9.630000e+01  \n",
      "max    1.335000e+02  1.698000e+02  1.797000e+02  1.799000e+02  \n",
      "\n",
      "[8 rows x 65 columns]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "\n",
    "# about this version:\n",
    "# learning rate: 0.0002\n",
    "# batchsize: 120\n",
    "# epochs: 160\n",
    "\n",
    "get_ipython().run_line_magic('matplotlib', 'inline')\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from keras.models import Sequential\n",
    "from keras.layers.core import Dense, Dropout, Activation, Flatten\n",
    "from keras.layers.convolutional import Conv1D\n",
    "from keras.layers import AveragePooling1D\n",
    "from keras.utils import np_utils\n",
    "from keras.optimizers import Adam\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import OneHotEncoder\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from contextlib import redirect_stdout\n",
    "from keras.callbacks import EarlyStopping, ModelCheckpoint\n",
    "\n",
    "\n",
    "def get_data():\n",
    "    data = pd.read_csv(\"/kaggle/input/train-cnn/p2pData.txt\", sep=\" \", header=None)\n",
    "    label = pd.read_csv(\"/kaggle/input/train-cnn/p2pLabel.txt\", sep=\" \", header=None)\n",
    "    data_columns = data.shape[1]\n",
    "    \n",
    "    # these two lines can only remove columns whose first entry is NaN\n",
    "    # in our case they actually remove two NaN-columns: 2nd and the final one\n",
    "    for i in range(0, data_columns):\n",
    "        if data[i][0] != data[i][0]:\n",
    "            del data[i]\n",
    "\n",
    "    data_columns = data.shape[1]\n",
    "    data.columns = np.arange(0, data_columns)\n",
    "\n",
    "    return data, label\n",
    "\n",
    "\n",
    "data, label = get_data()\n",
    "\n",
    "print(\"data.describe(): \",data.describe())\n",
    "\n",
    "# forward-fill\n",
    "data = data.fillna(method=\"ffill\", axis=0)\n",
    "\n",
    "\n",
    "scaler = StandardScaler()\n",
    "data = scaler.fit_transform(data)\n",
    "\n",
    "data = np.array(data)\n",
    "label = np.array(label)\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(data, label, test_size=0.2)\n",
    "n_samples, n_features = X_train.shape\n",
    "\n",
    "\n",
    "def reshapeData(data):\n",
    "    n_samples, n_features = data.shape\n",
    "    data = np.reshape(data, (n_samples, n_features, 1))\n",
    "    return data\n",
    "\n",
    "\n",
    "X_train = reshapeData(X_train)\n",
    "X_test = reshapeData(X_test)\n",
    "\n",
    "\n",
    "def toOneHot(label):\n",
    "    enc = OneHotEncoder()\n",
    "    enc.fit(label)\n",
    "    label = enc.transform(label).toarray()\n",
    "    return label\n",
    "\n",
    "\n",
    "y_train = toOneHot(y_train)\n",
    "y_test = toOneHot(y_test)\n",
    "\n",
    "adam = Adam(lr=0.0002, beta_1=0.9, beta_2=0.999, epsilon=1e-08, amsgrad=True)\n",
    "\n",
    "model = Sequential()\n",
    "model.add(\n",
    "    Conv1D(64,\n",
    "           kernel_size=7,\n",
    "           strides=2,\n",
    "           input_shape=(n_features, 1),\n",
    "           kernel_initializer='uniform',\n",
    "           padding='same'))\n",
    "model.add(Activation('relu'))\n",
    "model.add(Conv1D(64, kernel_size=7, strides=2, padding='same'))\n",
    "model.add(Activation('relu'))\n",
    "model.add(AveragePooling1D(pool_size=2))\n",
    "model.add(Dropout(0.2))\n",
    "\n",
    "model.add(Conv1D(128, kernel_size=7, strides=2, padding='same'))\n",
    "model.add(Activation('relu'))\n",
    "model.add(Conv1D(128, kernel_size=7, strides=2, padding='same'))\n",
    "model.add(Activation('relu'))\n",
    "model.add(AveragePooling1D(pool_size=1))\n",
    "model.add(Dropout(0.2))\n",
    "\n",
    "model.add(Flatten())\n",
    "model.add(Dense(512))\n",
    "model.add(Dense(512))\n",
    "model.add(Dense(5))\n",
    "model.add(Activation('softmax'))\n",
    "model.compile(loss='categorical_crossentropy',\n",
    "              optimizer=adam,\n",
    "              metrics=['accuracy'])\n",
    "\n",
    "with open('Model_Architecture.txt', 'w') as f:\n",
    "    with redirect_stdout(f):\n",
    "        model.summary()\n",
    "\n",
    "callbacks = [\n",
    "    EarlyStopping(monitor='val_acc',\n",
    "                  min_delta=0.00001,\n",
    "                  patience=6,\n",
    "                  verbose=0,\n",
    "                  mode='max',\n",
    "                  restore_best_weights=False),\n",
    "    ModelCheckpoint(filepath='./best_model.h5',\n",
    "                    monitor='val_acc',\n",
    "                    mode=\"max\",\n",
    "                    save_weights_only=False,\n",
    "                    save_best_only=True)\n",
    "]\n",
    "\n",
    "history = model.fit(X_train,\n",
    "                    y_train,\n",
    "                    batch_size=120,\n",
    "                    epochs=160,\n",
    "                    verbose=0,\n",
    "                    validation_split=0.3,\n",
    "                    callbacks=callbacks)\n",
    "\n",
    "model.save(\"./best_model.h5\")\n",
    "\n",
    "training_score, training_accuracy = model.evaluate(X_train, y_train, verbose=0)\n",
    "test_score, test_accuracy = model.evaluate(X_test, y_test, verbose=0)\n",
    "with open('output.txt', 'w') as f:\n",
    "    with redirect_stdout(f):\n",
    "        print('Training score:', training_score)\n",
    "        print('Training accuracy:', training_accuracy)\n",
    "        print('Test score:', test_score)\n",
    "        print('Test accuracy:', test_accuracy)\n",
    "\n",
    "plt.plot(history.history['loss'], label='train')\n",
    "plt.plot(history.history['val_loss'], label='val')\n",
    "plt.xlabel(\"epoch\")\n",
    "plt.title(\"Loss\")\n",
    "plt.legend(loc=\"best\")\n",
    "plt.savefig(\"./loss.png\")\n",
    "plt.show()\n",
    "\n",
    "plt.plot(history.history['accuracy'], label='train')\n",
    "plt.plot(history.history['val_accuracy'], label='val')\n",
    "plt.xlabel(\"epoch\")\n",
    "plt.title(\"Accuracy\")\n",
    "plt.legend(loc=\"best\")\n",
    "plt.savefig(\"./accuracy.png\")\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
